package com.species.web.wechat.miniapp.controller;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.hutool.core.util.ObjectUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * @Description: 微信小程序用户接口
 * @Author ZSY
 * @createTime 2020/6/24 14:02
 */
@Slf4j
@RestController
@Api(tags = "微信小程序接口", value = "微信小程序用户接口")
@RequestMapping("/api/wechat")
public class WxMaUserController {

//    @Resource
//    private IWechatService wechatService;
//    @Resource
//    private IMemberService memberService;
//
//    /**
//     * 登陆接口
//     */
//    @LoginLog("微信小程序登陆接口")
//    @ApiOperation(value = "微信小程序登陆接口")
//    @PostMapping("/login")
//    public CommonResult<?> login(@Valid @RequestBody WxMaLoginForm loginForm) {
//
//        final WxMaService wxMaService = WxMiniAppConfig.getMaService(loginForm.getAppId());
//
//        try {
//            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(loginForm.getCode());
//            //            使用AppId获取OpenID，SessionKey
//            //            log.info(session.getSessionKey());
//            //            log.info(session.getOpenid());
//            // 用户信息校验
//            //            if (!wxMaService.getUserService().checkUserInfo(session.getSessionKey(), loginForm.getRawData(), loginForm.getSignature())) {
//            //                throw new ApiException("user check failed");
//            //            }
//
//            WxMaUserInfo userInfo = loginForm.getUserInfo();
//
//            if (ObjectUtil.isNull(userInfo)) {
//                // 解密用户信息
//                userInfo = wxMaService.getUserService().getUserInfo(session.getSessionKey(), loginForm.getEncryptedData(), loginForm.getIv());
//            }
//
//            userInfo.setOpenId(session.getOpenid());
//            if (session.getUnionid() != null) {
//                userInfo.setUnionId(session.getUnionid());
//            }
//
//            log.info("微信用户信息=============》{}", userInfo);
//            return wechatService.loginByWxMiniApp(userInfo, loginForm);
//        } catch (WxErrorException e) {
//            log.error(e.getMessage(), e);
//            throw new ApiException(e.getMessage());
//        }
//    }
//
//    /**
//     * <pre>
//     * 获取用户信息接口
//     * </pre>
//     */
//    @ApiOperation(value = "小程序获取用户信息")
//    @GetMapping("/info")
//    public CommonResult<?> info(String appid, String sessionKey,
//                             String signature, String rawData, String encryptedData, String iv) {
//
//        final WxMaService wxService = WxMiniAppConfig.getMaService(appid);
//
//        // 用户信息校验
//        if (!wxService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {
//            return CommonResult.failed("user check failed");
//        }
//
//        // 解密用户信息
//        WxMaUserInfo userInfo = wxService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
//
//        return CommonResult.success(userInfo);
//    }
//
//    /**
//     * <pre>
//     * 获取用户绑定手机号信息
//     * </pre>
//     */
//    @ApiOperation(value = "用户绑定手机号")
//    @PostMapping("/phone")
//    public CommonResult<?> phone(@RequestBody WxGetPhoneForm phoneForm) throws WxErrorException {
//        log.info("appID: {}", phoneForm.getAppId());
//        final WxMaService wxMaService = WxMiniAppConfig.getMaService(phoneForm.getAppId());
//
//        WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(phoneForm.getCode());
//
//        // 解密
//        WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(session.getSessionKey(), phoneForm.getEncryptedData(), phoneForm.getIv());
//
//        log.info("【用户手机号=================》】{}", phoneNoInfo);
//
//        Member user = UserUtils.getUser();
//        user.setMobile(phoneNoInfo.getPhoneNumber());
//        memberService.saveOrUpdate(user);
//        // memberService.clearUserCache(user.getUsername());
//
//        return CommonResult.success(user);
//    }
//
//    /**
//     * <pre>
//     * 获取用户绑定手机号信息
//     * </pre>
//     */
//    @ApiOperation(value = "获取绑定手机号信息")
//    @PostMapping("/returnPhone")
//    public CommonResult<?> returnPhone(@RequestBody WxGetPhoneForm phoneForm) throws WxErrorException {
//        log.info("appID: {}", phoneForm.getAppId());
//        final WxMaService wxMaService = WxMiniAppConfig.getMaService(phoneForm.getAppId());
//
//        WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(phoneForm.getCode());
//
//        // 解密
//        WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(session.getSessionKey(), phoneForm.getEncryptedData(), phoneForm.getIv());
//
//        log.info("【用户手机号=================》】{}", phoneNoInfo);
//
//        return CommonResult.success(phoneNoInfo);
//    }

}
